package com.analyse.stock.model;

import com.analyse.stock.constant.StockConstant;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;
@Slf4j
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_user_fund_info")
public class UserFundInfoModel extends BaseModel<UserFundInfoModel> {

    /**
     * 登录用户id
     **/
    private String userId;

    /**
     * 资金账户id
     **/
    private String fundAccountId;

    /**
     * 资金账户持仓总市值，持仓
     **/
    private BigDecimal profitFund;

    /**
     * 账户可用资金
     **/
    private BigDecimal availFund;

    /**
     * 账户冻结资金
     * 挂了委卖单后需要冻结，
     * 委卖单撤单后 则恢复
     **/
    private BigDecimal freezeFund;

    /**
     * 交易可用资金（配置的），<= 账户可用资金
     * 委卖单撤单后  交易可用资金增加
     **/
    private BigDecimal tradeAvailFund;

    public static void sell(UserFundInfoModel model,String stockCode){
        UserFundInfoModel fund = StockConstant.FUND_ACCOUNT_MAP.get(stockCode);
        BigDecimal sellAmt = BigDecimal.valueOf(8123.42);
        //持仓市值，冻结资金 减少
        fund.setFreezeFund(fund.getFreezeFund().subtract(sellAmt));
        fund.setProfitFund(fund.getTradeAvailFund().subtract(sellAmt));
        //分配给交易账户的  可用资金增加
        fund.setTradeAvailFund(fund.getTradeAvailFund().add(sellAmt));
        log.info("## 股票：{}，【卖出】成功,资金账户可交易资金增加：{},剩余可用交易资金：{}",
                stockCode,sellAmt,fund.getTradeAvailFund());
    }

    public static void buyBefore(UserFundInfoModel fund,String stockCode,BigDecimal bugAmt){
        //下委买单前，冻结资金 增加
        fund.setFreezeFund(fund.getFreezeFund().add(bugAmt));
        //下委买单前, 分配给交易账户的  可用资金减少
        fund.setTradeAvailFund(fund.getTradeAvailFund().subtract(bugAmt));
    }

    public static void buyAfter(UserFundInfoModel fund,String stockCode,BigDecimal bugAmt){
        //持仓市值 增加
        fund.setProfitFund(fund.getTradeAvailFund().add(bugAmt));
        fund.setFreezeFund(fund.getFreezeFund().subtract(bugAmt));
        log.info("## 股票：{}，【买入】成功,资金账户可交易资金减少：{}，剩余可用交易资金：{}",
                stockCode,bugAmt,fund.getTradeAvailFund());
    }
}
